FEXP Solver  1.0.0.0
FEXPCalculation.h
Go to the documentation of this file.
1 // © FEXP, FEXPEnterprise Solver, Ing. Vaclav Rek
3 // Manages steps of calculation
4 // Compiler must support C++ ver.14 and later
6 #ifndef _CFEXPCALCULATION_H_
7 #define _CFEXPCALCULATION_H_
8 #include "FEXPCommon.h"
9 #include "FEXPElement.h"
10 #include "FEXPResultExport.h"
11 
14 
16 #define STABILITY_SAFETY_FACTOR 0.96 // safety factor for stability control
18 #define DEFAULT_TIME_STEP 0 // default initial time step
19 
26 
29 {
30 public:
31  using t_SearchInput = const std::vector<t_fexpcommon_ct>;
33  using t_Searcher = std::function<t_SearchResult(t_SearchInput & min_bound, t_SearchInput & max_bound)>;
34  ICFEXPExplicitCalcBase(Ptr<ICFEXPDataModelContIntf> model, Ptr<ICFEXPResultExport> exporter, std::function<void()> updater, t_Searcher searcher)
35  : _fe_model(model), _geom_map_updater(updater), _geom_map_searcher(searcher), _result_exporter(exporter) { }
37 
38  // pure virtual member functions
39  // calculation steps
40  virtual size_t SimulationTimeIncrement (size_t thread_id) = 0;
41  virtual bool CheckEnd (size_t thread_id) = 0;
42  virtual void PrepareDataForNewTimeLevel (size_t thread_id) = 0;
43  virtual void UpdateModelMapping (size_t thread_id) = 0;
44  virtual void GlobalToLocalTransformation(size_t thread_id) = 0;
45  virtual void CalculateForces (size_t thread_id) = 0;
46  virtual void CalculateNewGeometry (size_t thread_id) = 0;
47  virtual bool TrySaveResults (size_t thread_id, bool forced) = 0;
48  virtual void PrintOutResults (size_t thread_id) = 0;
49  virtual bool ClearResults (size_t thread_id) = 0;
50  virtual void StabilityControl (size_t thread_id) = 0;
52  virtual void SetNewTimeStep (t_fexpcommon_ct dt) = 0;
53 
54  static std::string GetCalcBehavOutString(Ptr<ICFEXPElementNodeBase> node, size_t dof);
55 protected:
56  Ptr<ICFEXPDataModelContIntf> get_model () { return _fe_model; }
57  void update_geometry_map() { _geom_map_updater(); }
58  t_SearchResult search_close_nodes (t_SearchInput min, t_SearchInput max) { return _geom_map_searcher(min, max); }
59  Ptr<ICFEXPResultExport> get_result_exporter() { return _result_exporter; }
60 private:
62  std::function<void()> _geom_map_updater;
63  t_Searcher _geom_map_searcher;
64  // export of results
65  Ptr<ICFEXPResultExport> _result_exporter;
66 };
67 
74 
77  : public ICFEXPExplicitCalcBase
78 {
79 public:
81  std::function<void()> updater, t_Searcher searcher, bool network = false)
82  : ICFEXPExplicitCalcBase(model, exporter, updater, searcher), _is_network_calc(network)
83  {
85  _time_step_dt_old = t_fexpcommon_ct(FEXPCOMMON_DEFAULT_VALUE);
86  _time_step_dt_min = GET_MAX_FLT_VAL(t_fexpcommon_ct);
87  }
88 
89  // override virtual base functions for calculation steps
90  virtual size_t SimulationTimeIncrement (size_t thread_id) override;
91  virtual bool CheckEnd (size_t thread_id) override;
92  virtual void PrepareDataForNewTimeLevel (size_t thread_id) override;
93  virtual void UpdateModelMapping (size_t thread_id) override;
94  virtual void GlobalToLocalTransformation(size_t thread_id) override;
95  virtual void CalculateForces (size_t thread_id) override;
96  virtual void CalculateNewGeometry (size_t thread_id) override;
97  virtual bool TrySaveResults (size_t thread_id, bool forced = false) override;
98  virtual void PrintOutResults (size_t thread_id) override;
99  virtual bool ClearResults (size_t thread_id) override;
100  virtual void StabilityControl (size_t thread_id) override;
101  virtual t_fexpcommon_ct GetCalculatedCriticTimeStep() override;
102  virtual void SetNewTimeStep (t_fexpcommon_ct dt) override;
103 protected:
104  void save_results_and_export(size_t thread_id, Ptr<ICFEXPDataModelContIntf> reslt_cont);
105 private:
106  bool _is_network_calc;
107  t_fexpcommon_ct _time_step_dt;
108  t_fexpcommon_ct _time_step_dt_min;
109  t_fexpcommon_ct _time_step_dt_old;
110 
111  size_t save_node_result(Ptr<ICFEXPElementNodeBase> node, Ptr<ICFEXPDataModelContIntf> reslt_cont);
112  size_t save_elem_connct(Ptr<ICFEXPElementBase> elem, Ptr<ICFEXPDataModelContIntf> reslt_cont);
113 };
114 
115 #endif // !_CFEXPCALCULATION_H_
#define GET_MAX_FLT_VAL(type)
Definition: FEXPCommon.h:205
virtual size_t SimulationTimeIncrement(size_t thread_id) override
It sets the numeber of an time step increment.
Definition: FEXPCalculation.cpp:50
virtual bool CheckEnd(size_t thread_id) override
It checks the end of numerical simulation.
Definition: FEXPCalculation.cpp:70
Ptr< ICFEXPDataModelContIntf > get_model()
Definition: FEXPCalculation.h:56
t_SearchResult search_close_nodes(t_SearchInput min, t_SearchInput max)
Definition: FEXPCalculation.h:58
virtual void GlobalToLocalTransformation(size_t thread_id) override
It computes transformation from a global frame to a local frame of FEs.
Definition: FEXPCalculation.cpp:212
virtual size_t SimulationTimeIncrement(size_t thread_id)=0
virtual void CalculateNewGeometry(size_t thread_id) override
It computes the new geometry (update of model geometry).
Definition: FEXPCalculation.cpp:198
virtual void PrepareDataForNewTimeLevel(size_t thread_id) override
It prepares the data for the new time increment (set to default state).
Definition: FEXPCalculation.cpp:93
virtual void GlobalToLocalTransformation(size_t thread_id)=0
virtual void SetNewTimeStep(t_fexpcommon_ct dt)=0
virtual void PrintOutResults(size_t thread_id) override
It prints out appropriate result data from numerical simulation to console window.
Definition: FEXPCalculation.cpp:254
CFEXPCalculation(Ptr< ICFEXPDataModelContIntf > model, Ptr< ICFEXPResultExport > exporter, std::function< void()> updater, t_Searcher searcher, bool network=false)
Definition: FEXPCalculation.h:80
Definition: FEXPCommon.h:276
double t_fexpcommon_ct
Definition: FEXPCommon.h:120
It represents the class implementing the explicit computation.
Definition: FEXPCalculation.h:76
const std::vector< t_fexpcommon_ct > t_SearchInput
Definition: FEXPCalculation.h:31
Ptr< ICFEXPResultExport > get_result_exporter()
Definition: FEXPCalculation.h:59
virtual void CalculateForces(size_t thread_id) override
It computes forces (internal, external, contact).
Definition: FEXPCalculation.cpp:122
virtual void StabilityControl(size_t thread_id)=0
virtual void PrintOutResults(size_t thread_id)=0
virtual void StabilityControl(size_t thread_id) override
It check the stability of an explicit numerical integration of equation of motion (computes stabil ti...
Definition: FEXPCalculation.cpp:162
void save_results_and_export(size_t thread_id, Ptr< ICFEXPDataModelContIntf > reslt_cont)
Definition: FEXPCalculation.cpp:281
virtual void CalculateForces(size_t thread_id)=0
virtual void UpdateModelMapping(size_t thread_id) override
It updates the map of FE mesh for detection of contact.
Definition: FEXPCalculation.cpp:113
void update_geometry_map()
Definition: FEXPCalculation.h:57
virtual bool ClearResults(size_t thread_id) override
It clears memory with the current results.
Definition: FEXPCalculation.cpp:274
virtual bool TrySaveResults(size_t thread_id, bool forced=false) override
It saves the resulting simulation data for the current simulation time.
Definition: FEXPCalculation.cpp:225
virtual void CalculateNewGeometry(size_t thread_id)=0
virtual ~ICFEXPExplicitCalcBase()
Definition: FEXPCalculation.h:36
#define FEXPCOMMON_DEFAULT_VALUE
Definition: FEXPCommon.h:179
virtual bool CheckEnd(size_t thread_id)=0
ICFEXPExplicitCalcBase(Ptr< ICFEXPDataModelContIntf > model, Ptr< ICFEXPResultExport > exporter, std::function< void()> updater, t_Searcher searcher)
Definition: FEXPCalculation.h:34
virtual bool TrySaveResults(size_t thread_id, bool forced)=0
virtual void UpdateModelMapping(size_t thread_id)=0
virtual t_fexpcommon_ct GetCalculatedCriticTimeStep()=0
static std::string GetCalcBehavOutString(Ptr< ICFEXPElementNodeBase > node, size_t dof)
It composes formated output string for the monitoring of the FEXP solver behaviour.
Definition: FEXPCalculation.cpp:12
virtual bool ClearResults(size_t thread_id)=0
std::function< t_SearchResult(t_SearchInput &min_bound, t_SearchInput &max_bound)> t_Searcher
Definition: FEXPCalculation.h:33
virtual t_fexpcommon_ct GetCalculatedCriticTimeStep() override
It gives computed minimal time step.
Definition: FEXPCalculation.cpp:179
virtual void SetNewTimeStep(t_fexpcommon_ct dt) override
It sets the time step.
Definition: FEXPCalculation.cpp:188
It represents the base class interface for explicit computation.
Definition: FEXPCalculation.h:28
virtual void PrepareDataForNewTimeLevel(size_t thread_id)=0